home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
PROBLEMS
/
BENCHMARK
/
BUBBLESORT
/
bubbletest
/
assembler
/
source
< prev
next >
Wrap
Text File
|
1992-09-02
|
5KB
|
219 lines
.ABSOLUTE
.PROC formula
; bubbletest.assembler.needed is FREEWARE, you may not sell it
.INCLUDE <bubble_assembler$dir>.needed
; FUNCTION INT bubblesort(INTPTR a,INT length)
.MACRO bubblesort formularesult,a,length
; R9 = Adress(a)
LDR R9,[stackregister,#%2]
; R10 = length -1
LDR R10,[stackregister,#%3]
SUB R10,R10,#1.
; DO
\dolabel1
MOV R0,#0
; FOR (R3=0;R3<length-1;R3=R3+1)
MOV R5,R9
MOV R3,#0.
B \jumpinfor
\for2label2
;R4=[R5]; R6=a[R5,#4]
LDMFD R5,{R4,R6}
CMP R4,R6
STRGT R6,[R5]
ADD R5,R5,#4.
STRGT R4,[R5]
MOVGT R0,#1
ADD R3,R3,#1
\jumpinfor
CMP R3,R10
BLT \for2label2
; ENDFOR
\jumpinwhile
CMP R0,#1
BEQ \dolabel1
;ENDDO (R0==1)
; ENDFUNCTION
.ENDM
restoreregister
goto jump
; INT a[1000]
DEFSTORE a,formula_one*1000.*4.,0
jump
saveregister
; call system with 1 arguments
STRINGconstload R1,'*wimpslot -min 7K -max 7K'
CHARPTRstackstore [stackregister,#16.],R1
STACKadd stackregister,stackregister,20.
system R0,-4.
STACKsub stackregister,stackregister,20.
;R0
; pseudo ramdom
; LET R0=123456;
; SAVEd R0
;R0=123456.
INTconstload R1,123456.
INTregstore R0,R1
; FOR (R1=0;R1<1000;R1=R1+1)
; SAVEd R1
;R1=0.
INTconstload R2,0.
INTregstore R1,R2
goto for2label4
forlabel4
; SAVEd R1
;R1=R1+1.
INTconstload R2,1.
INTsum R2,R1,R2
INTregstore R1,R2
for2label4
; SAVEd R1
; SAVEd R1
;R1<1000.
INTconstload R2,1000.
INTless R2,R1,R2
ifnotgoto endforlabel4,R2
; LET R0=(R0 + 234567) % 567 + 345
; SAVEd R0
;R0+234567.
INTconstload R2,234567.
INTsum R2,R0,R2
;R0=R2%567.+345.
INTconstload R3,567.
INTmodulo R2,R2,R3
INTconstload R3,345.
INTsum R2,R2,R3
INTregstore R0,R2
; LET a[R1]=R0;
; SAVEd R1
; SAVEd R0
;R1
; array a with 1 dimensions
INTregstore R3,R1
INTconstmult R3,4
INTPTRconstload R4,a
INTsum R3,R3,R4
;R3=R0
INTarraystore R3,R0
; LET writeint(a[R1])
; SAVEd R1
;R1
; array a with 1 dimensions
INTregstore R3,R1
INTconstmult R3,4
INTPTRconstload R4,a
INTsum R3,R3,R4
INTarrayload R3,R3
;R3
; call writeint with 1 arguments
STMIA R12,{R0,R1,R3}
INTstackstore [stackregister,#28.],R3
STACKadd stackregister,stackregister,32.
writeint R2,-4.
STACKsub stackregister,stackregister,32.
LDMFD R12,{R0,R1,R3}
;R2
restoreregister
cr
; ENDFOR
saveregister
goto forlabel4
endforlabel4
; LET system("show time1")
;'show time1'
; call system with 1 arguments
STMIA R12,{R0,R1}
STRINGconstload R3,'show time1'
CHARPTRstackstore [stackregister,#24.],R3
STACKadd stackregister,stackregister,28.
system R2,-4.
STACKsub stackregister,stackregister,28.
LDMFD R12,{R0,R1}
;R2
; LET bubblesort(a,1000)
;a
;1000.
; call bubblesort with 2 arguments
STMIA R12,{R0,R1}
INTconstload R3,1000.
INTstackstore [stackregister,#24.],R3
INTPTRconstload R3,a
INTPTRstackstore [stackregister,#28.],R3
STACKadd stackregister,stackregister,32.
bubblesort R2,-4.,-8.
STACKsub stackregister,stackregister,32.
LDMFD R12,{R0,R1}
;R2
; LET system("show time1")
;'show time1'
; call system with 1 arguments
STMIA R12,{R0,R1}
STRINGconstload R3,'show time1'
CHARPTRstackstore [stackregister,#24.],R3
STACKadd stackregister,stackregister,28.
system R2,-4.
STACKsub stackregister,stackregister,28.
LDMFD R12,{R0,R1}
;R2
; FOR (R1=0;R1<1000;R1=R1+1)
; SAVEd R1
; SAVEd R1
;R1=0.
INTconstload R2,0.
INTregstore R1,R2
goto for2label5
forlabel5
; SAVEd R1
; SAVEd R1
; SAVEd R1
;R1=R1+1.
INTconstload R2,1.
INTsum R2,R1,R2
INTregstore R1,R2
for2label5
; SAVEd R1
; SAVEd R1
;R1<1000.
INTconstload R2,1000.
INTless R2,R1,R2
ifnotgoto endforlabel5,R2
; LET writeint(a[R1])
; SAVEd R1
;R1
; array a with 1 dimensions
INTregstore R3,R1
INTconstmult R3,4
INTPTRconstload R4,a
INTsum R3,R3,R4
INTarrayload R3,R3
;R3
; call writeint with 1 arguments
STMIA R12,{R0,R1,R3}
INTstackstore [stackregister,#28.],R3
STACKadd stackregister,stackregister,32.
writeint R2,-4.
STACKsub stackregister,stackregister,32.
LDMFD R12,{R0,R1,R3}
;R2
restoreregister
cr
; ENDFOR
saveregister
goto forlabel5
endforlabel5
restoreregister
SWI XOS_Exit
.END
; end of inputfile: <formula$input>